#include "gtktypebuiltins.h"
#include "gtkwidgetprivate.h"
#include "gtkwindow.h"
+#include "gtkeventcontrollerkey.h"
#include "a11y/gtkrangeaccessible.h"
GtkGesture *multipress_gesture;
GtkGesture *drag_gesture;
GtkEventController *scroll_controller;
+ GtkEventController *key_controller;
GtkScrollType autoscroll_mode;
guint autoscroll_id;
static gboolean gtk_range_real_change_value (GtkRange *range,
GtkScrollType scroll,
gdouble value);
-static gboolean gtk_range_key_press (GtkWidget *range,
- GdkEventKey *event);
+static gboolean gtk_range_key_controller_key_pressed (GtkEventControllerKey *controller,
+ guint keyval,
+ guint keycode,
+ GdkModifierType state,
+ GtkWidget *widget);
static void gtk_range_direction_changed (GtkWidget *widget,
GtkTextDirection previous_direction);
static void gtk_range_measure_trough (GtkGizmo *gizmo,
widget_class->snapshot = gtk_range_snapshot;
widget_class->size_allocate = gtk_range_size_allocate;
widget_class->unmap = gtk_range_unmap;
- widget_class->key_press_event = gtk_range_key_press;
widget_class->direction_changed = gtk_range_direction_changed;
class->move_slider = gtk_range_move_slider;
GTK_EVENT_CONTROLLER_SCROLL_BOTH_AXES);
g_signal_connect (priv->scroll_controller, "scroll",
G_CALLBACK (gtk_range_scroll_controller_scroll), range);
+
+ priv->key_controller =
+ gtk_event_controller_key_new (GTK_WIDGET (range));
+ g_signal_connect (priv->key_controller, "key-pressed",
+ G_CALLBACK (gtk_range_key_controller_key_pressed), range);
}
/**
g_clear_object (&priv->multipress_gesture);
g_clear_object (&priv->long_press_gesture);
g_clear_object (&priv->scroll_controller);
+ g_clear_object (&priv->key_controller);
gtk_widget_unparent (priv->slider_widget);
}
static gboolean
-gtk_range_key_press (GtkWidget *widget,
- GdkEventKey *event)
+gtk_range_key_controller_key_pressed (GtkEventControllerKey *controller,
+ guint keyval,
+ guint keycode,
+ GdkModifierType state,
+ GtkWidget *widget)
{
- GdkDevice *device;
GtkRange *range = GTK_RANGE (widget);
GtkRangePrivate *priv = gtk_range_get_instance_private (range);
- guint keyval;
-
- device = gdk_event_get_device ((GdkEvent *) event);
- device = gdk_device_get_associated_device (device);
-
- if (!gdk_event_get_keyval ((GdkEvent *) event, &keyval))
- return GDK_EVENT_PROPAGATE;
if (gtk_gesture_is_active (priv->drag_gesture) &&
- device == gtk_gesture_get_device (priv->drag_gesture) &&
keyval == GDK_KEY_Escape &&
priv->grab_location != NULL)
{
return GDK_EVENT_STOP;
}
- return GTK_WIDGET_CLASS (gtk_range_parent_class)->key_press_event (widget, event);
+ return TRUE;
}
static void